package mine.code.day.year2021.month08;

import org.junit.Test;

/**
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每 2k 个字符反转前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "abcdefg", k = 2
 * 输出："bacdfeg"
 * <p>
 * 示例 2：
 * <p>
 * 输入：s = "abcd", k = 2
 * 输出："bacd"
 *
 * @author caijinnan
 */
public class Day20_反转字符串II {

    @Test
    public void run() {
        String s = "abcdefg";
//        String s = "bacdfeg";
//        [0,1,2,3,4,5,6,7,8]
//        (0,1)->(4,5),
        int k = 8;
        System.out.println(reverseStr(s, k));
    }

    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        int length = chars.length;
        for (int i = 0; i < length; ) {
            if (i + k >= length) {
                revers(chars, i, length-1);
            }else{
                revers(chars, i, i + k - 1);
            }
            i = i + 2 * k;
        }
        return new String(chars);
    }

    public void revers(char[] reversArr, int start, int end) {
        for (int i = start, j = end; i <= j; i++, j--) {
            char x = reversArr[i];
            char y = reversArr[j];
            reversArr[i] = y;
            reversArr[j] = x;
        }
    }

}
